Computer systems in general are very rigid. Application developers and users of the system must often know intimate details of hardware protocol and configurations in order to provide a system in which information flows smoothly. Details of each particular type of port and IO device must be dealt with on an individual basis. Application developers and users must also be kept constantly abreast of each change in the system in order to provide corresponding changes to the software and hardware so that the changes can be taken full advantage of.
The rate at which IO devices change, as well as the rate of change of intermediate elements which are used to transfer information to and from an IO device, is extremely fast. Each change requires a learning process of system users so that the system may be kept performing in an optimum manner.
A computer system can be thought of as a large collection of clients which need services performed. Clients could be considered to be virtually any part of the system which may need something. For example, the CPU could be considered to be a client which needs a service performed by a particular element in the system. The performance of the service may involve many steps, and many elements to provide the requested service. A service could be considered to be anything which provides something which is needed by another entity in the system. For example, a particular chip may provide a particular type of digital signal processing as a service for another system element. A single element could at one time be a client, and at another time provide a service to a client.
The interplay of clients and services often requires great attention by developers and users in order to make the requests for services, and providing of services, a smooth process. The protocol for requests and providing is often very inflexible, and requires intervention in minute details to change the protocol. In many respects, requests for services and providing services could be considered to be set in stone.
There is therefore, a need to provide a flexible system for requesting and providing services. The system needs to overcome the above difficulties concerning the level of detail involved, the problems associated with system changes, and the overall rigidity of software and hardware between clients and service providers.